两个数的最大公因数

想要找出两个数的最大公因数,最笨的方法就是蛮力法,除此之外还有欧几里得算法(包括除法和减法)。

第一种方法:蛮力法
蛮力法就是注意寻找最小公因数,然后在相乘,就是数学中的短除法找最大公因数

int main() {
    int m;
    int n;
    int factor = 1;
    printf("请输入m和n:\n");

    //m和n的值随机产生
    srand(time(0));
    m = rand() % 100 + 1;//产生[1-101)的随机数
    n = rand() % 100 + 1;

    printf("n = %d\n", n);
    printf("m = %d\n", m);

    //2开始找公因数,逐一相乘
    for (int i = 2; i <= m && i <= n; i++) {
        while (m % i == 0 && n % i == 0){
            factor *= i;
            m /= i;
            n /= i;
        }
    }

    printf("最大公因数 = %d", factor);

    return 0;
}

第二种方法:欧几里得算法(除法)
算法思想:
1、 r = m % n;
2、循环以下步骤直到 r 等于0
(1)m=n;
(2)n=r;
(3)r=m%n;
3、n就是最大公因数,输出 n ;

代码如下:

int main() {
    int m;
    int n;
    int factor;

    srand(time(0));

    m = rand() % 100 + 1;
    n = rand() % 100 + 1;

    /*大数除以小数或者小数除以大数都可以
    但大数除以小数好理解一下*/
    m = m > n ? m : n;//把大数赋给m
    n = m < n ? m : n;//把小数赋给n

    factor = m % n;

    printf("m = %d\n", m);
    printf("n = %d\n", n);

    printf("------------------------\n");

    while(factor != 0){
        m = n;
        n = factor;
        factor = m % n;
    }

    factor = n;

    printf("factor = %d\n", factor);

    return 0;
}

第三种方法:欧几里得算法(减法)
算法思想:
1、r= m - n;(m>n)
2、循环以下步骤直到 r 等于0
(1)m=n;(n>r)
(2)n=r;(n>r)
(3)r=m - n;
3、n就是最大公因数,输出 n ;

代码如下:

int main() {
    int m;
    int n;
    int factor;

    srand(time(0));

    m = rand() % 100 + 1;
    n = rand() % 100 + 1;

    m = m > n ? m : n;
    n = m < n ? m : n;

    factor = m - n;

    printf("m = %d\n", m);
    printf("n = %d\n", n);
    printf("------------------------\n");

    while(factor != 0){
        m = n > factor ? n : factor;//把大数赋给m
        n = n < factor ? n : factor;//把小数赋给n
        factor = m - n;
    }

    factor = n;

    printf("factor = %d\n", factor);
    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值